package com.crdeng.system.service.impl;

import com.crdeng.system.entity.Menu;
import com.crdeng.system.mapper.MenuMapper;
import com.crdeng.system.service.MenuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 菜单表 服务实现类
 * </p>
 *
 * @author crdeng
 * @since 2020-11-27
 */
@Service
public class
MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {

    private List<Menu> all=new ArrayList<>();


    @Override
    public List<Menu> getMenuTree() {
        //所有待处理菜单选向
         all = this.list();
        //要返回的菜单树
        List<Menu> menus = new ArrayList<>();
        //获取父节点
        for (Menu menu : all) {
            if (menu.getParentId()==0){
              menus.add(menu) ;
            }
        }
        all.removeAll(menus);

        //父节点获取子节点
        for (Menu menu : menus) {
                menu.setChildren(getMenuChild(menu));
        }

        return menus;
    }

    private List<Menu>  getMenuChild(Menu menu){
        // 判断当前节点有没有子节点, 没有则创建一个空长度的 List, 有就使用之前已有的所有子节点.
        List<Menu> childList=  menu.getChildren()==null? new ArrayList<>():menu.getChildren();

        // 从 "待用菜单列表" 中找到当前节点的所有子节点
        for (Menu childMenu : all) {
            if (menu.getId().equals(childMenu.getParentId())){
                childList.add(childMenu);
            }
        }

        // 将当前节点的所有子节点从 "待用菜单列表" 中删除
       all.removeAll(childList);

        // 所有的子节点再寻找它们自己的子节点
        for (Menu child : childList) {
            child.setChildren(getMenuChild(child));
        }

        return  childList;

    }



    @Override
    public List<Integer> getMenuIdList() {
        return baseMapper.getMenuIdList();
    }
}
